//#import <Foundation/Foundation.h>
//
//@class HTTPMessage;
//@class GCDAsyncSocket;
//
//
//#define WebSocketDidDieNotification  @"WebSocketDidDie"
//
//@interface WebSocket : NSObject
//{
//	dispatch_queue_t websocketQueue;
//	
//	HTTPMessage *request;
//	GCDAsyncSocket *asyncSocket;
//	
//	NSData *term;
//	
//	BOOL isStarted;
//	BOOL isOpen;
//	BOOL isVersion76;
//	
//	id __unsafe_unretained delegate;
//}
//
//+ (BOOL)isWebSocketRequest:(HTTPMessage *)request;
//
//- (id)initWithRequest:(HTTPMessage *)request socket:(GCDAsyncSocket *)socket;
//
///**
// * Delegate option.
// * 
// * In most cases it will be easier to subclass WebSocket,
// * but some circumstances may lead one to prefer standard delegate callbacks instead.
//**/
//@property (/* atomic */ unsafe_unretained) id delegate;
//
///**
// * The WebSocket class is thread-safe, generally via it's GCD queue.
// * All public API methods are thread-safe,
// * and the subclass API methods are thread-safe as they are all invoked on the same GCD queue.
//**/
//@property (nonatomic, readonly) dispatch_queue_t websocketQueue;
//
///**
// * Public API
// * 
// * These methods are automatically called by the HTTPServer.
// * You may invoke the stop method yourself to close the WebSocket manually.
//**/
//- (void)start;
//- (void)stop;
//
///**
// * Public API
// *
// * Sends a message over the WebSocket.
// * This method is thread-safe.
// **/
//- (void)sendMessage:(NSString *)msg;
//
///**
// * Public API
// *
// * Sends a message over the WebSocket.
// * This method is thread-safe.
// **/
//- (void)sendData:(NSData *)msg;
//
///**
// * Subclass API
// * 
// * These methods are designed to be overriden by subclasses.
//**/
//- (void)didOpen;
//- (void)didReceiveMessage:(NSString *)msg;
//- (void)didClose;
//
//@end
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//#pragma mark -
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
///**
// * There are two ways to create your own custom WebSocket:
// * 
// * - Subclass it and override the methods you're interested in.
// * - Use traditional delegate paradigm along with your own custom class.
// * 
// * They both exist to allow for maximum flexibility.
// * In most cases it will be easier to subclass WebSocket.
// * However some circumstances may lead one to prefer standard delegate callbacks instead.
// * One such example, you're already subclassing another class, so subclassing WebSocket isn't an option.
//**/
//
//@protocol WebSocketDelegate
//@optional
//
//- (void)webSocketDidOpen:(WebSocket *)ws;
//
//- (void)webSocket:(WebSocket *)ws didReceiveMessage:(NSString *)msg;
//
//- (void)webSocketDidClose:(WebSocket *)ws;
//
//@end
